// 引入 CryptoJS 库，用于进行 HMAC-SHA256 加密
// const CryptoJS = require('crypto-js');
import CryptoJS from "crypto-js"
// pay_sig 签名算法
function calcPaySig(uri, postBody, appkey) {
    // 拼接需要签名的消息
    const needSignMsg = uri + '&' + postBody;
    // 使用 HMAC-SHA256 算法进行签名
    const paySig = CryptoJS.HmacSHA256(needSignMsg, appkey).toString(CryptoJS.enc.Hex);
    return paySig;
}

// 用户登录态 signature 签名算法
function calcSignature(postBody, sessionKey) {
    // 使用 HMAC-SHA256 算法进行签名
    const signature = CryptoJS.HmacSHA256(postBody, sessionKey).toString(CryptoJS.enc.Hex);
    return signature;
}

// uri，切记不可带参数，即去掉 "?" 及后面的部分
// 如果是基础库的 wx.requestCommonPayment，uri 固定为 requestCommonPayment
const uri = 'requestCommonPayment';
// const uri = '/retail/B2b/getorder';
// 此处 appkey 为假设值，实际使用应根据支付环境 (env 参数) 替换为对应的 AppKey
const appkey = "wXDfvw6yL58NeoZi0zR6BbC9JQ13CGgE";

// 注意：JSON 数据序列化结果，不同语言/版本结果可能不同
// 所以示例为了保证稳定性，直接用其中一个序列化的版本
// 实际使用时只需要保证，参与签名的 post_body 和真正发起 http 请求的一致即可
const postBody = '{"mchid":"1712793914","env":0,"out_trade_no":"P202504081544291","description":"测试规格明细商品","amount":{"order_amount":10261,"currency":"CNY"}';

// step1. pay_sig 签名计算（支付请求签名算法）
const paySig = calcPaySig(uri, postBody, appkey);
console.log("pay_sig:", paySig);

// 若实际请求返回 pay_sig 签名不对，根据以下步骤排查：
// 1. 确认算法：uri、post_body、appkey 写死以上参数，确保你的签名算法和示例 calc_pay_sig 结果完全一致
// 2. 确认参数：
//    - uri 不可带参数（即 "?" 及后续部分全部舍去）
//    - post_body 必须和真正发起 HTTP 请求的 post body 完全一致
//    - appkey 必须是与请求中对应的环境匹配（env 参数决定）
//    - 注：签名区分大小写
// console.assert(paySig === "2cb3e9fda4da9774f0c6f747bbf6c56e9045969d9921db7344fffdc945c1dc23", "pay_sig 签名计算错误");

// step2. signature 签名计算（用户登录态签名算法）
// session_key 需要为当前用户有效 session_key（参考 auth.code2Session 接口获取）
// 注：签名区分大小写
// 此处写死方便复现算法
const sessionKey = "dQF36bTkRSl15af1tZcVHg==";
const signature = calcSignature(postBody, sessionKey);
console.log("signature:", signature);
// console.assert(signature === "47784191c740b0522d39d0a3926a19aa0e30c77975f689a9739c9553ffac2d9d", "signature 签名计算错误");   
export default {
      paySig,
      signature,
};